package redis

import (
	gconfig "funlog-gserver/config"
	"log"
	"strconv"
	"sync"

	"github.com/go-redis/redis"
)

var RDB *redis.Client
var once sync.Once

// 单例模式
func InitRedis() {
	once.Do(func() {
		RDB = newClient()
	})
}

//newClient  新建实例
func newClient() *redis.Client {
	// 根据key获取配置信息
	config := gconfig.Cnf
	addr := config["REDIS_ADDR"]
	port := config["REDIS_PORT"]
	password := config["REDIS_PWD"]
	db, err := strconv.Atoi(config["REDIS_DB"])
	if addr == "" {
		log.Println("redis addr is nil")
		return nil
	}
	if err != nil {
		db = 0
	}
	// 设置连接池的大小为5
	poolSize, err := strconv.Atoi(config["REDIS_POOLSIZE"])
	if err != nil {
		poolSize = 5
	}
	// 创建client
	client := redis.NewClient(&redis.Options{
		Addr:     addr + ":" + port,
		Password: password,
		DB:       db,
		PoolSize: poolSize,
	})

	// 测试是否有效
	client.Ping().Result()
	// fmt.Println(pong, err)
	log.Println("redis connected")
	return client
}
